<?php
class CategoryModel extends Model
{
    public function __construct()
    {
        $this->loadTable('category');
    }
    
    public function handleIndex()
    {
        $result = array();
        $result['cat_list'] = array();
        $this->getCategories(0, $result['cat_list']);
        return $result;
    }

    public function handleAdd()
    {
        $flagError = FALSE;
        $errorArr = array();
        $result = array();
        
        if($_POST['name'] == NULL || strlen($_POST['name']) > 30)
        {
            $flagError = TRUE;
            $errorArr[] = "Tên danh mục không được để trống hoặc nhiều hơn 30 kí tự";
        }
        
        
        if($flagError)
        {
            $result['error'] =& $errorArr;
            $result['input'] = $_POST;
            return $result;
        }
        
        if($_POST['parent_id'] != 0)
        {
            $con = array('id' => $_POST['parent_id']);
            $rs = $this->tables['category']->get($con);
            $row = $rs->getRow(0);
            $level = $row->c_level + 1;
        }
        else
        {
            $level = 0;
        }
        
        $this->tables['category']->set('name',$_POST['name']);
        if (!is_null($_POST['link']))
            $this->tables['category']->set('link', $_POST['link']);
        $this->tables['category']->set('parent_id',$_POST['parent_id']);
        $this->tables['category']->set('c_level',$level);
        $this->tables['category']->set('c_order', 0);
        $this->tables['category']->insert();
        $result['message'] = "Thêm danh mục thành công";
        return $result;
    }

    public function getCategories($parent_id,&$array)
    {
        if(is_null($array))
            $array = array();
        $db = DataProvider::getInstance();
        $sql = "SELECT * FROM category";
        if(is_null($parent_id))
        {
            $sql .= " WHERE parent_id is NULL";
        }
        else
        {
            $sql .= " WHERE parent_id = $parent_id";
        }
        $rs = $db->_query($sql);
        $size = $rs->getSize();
        if($size == 0)
            return;
        for($i = 0; $i < $size; $i++)
        {
            $tempRow = $rs->getRow($i);
            $array[] = $tempRow;
            $this->getCategories($tempRow->id,$array);
        }
        return $array;
    }

    public function handleEdit($id)
    {
        $flagError = FALSE;
        $errorArr = array();
        $result = array();

        if ($_POST['name'] == NULL || strlen($_POST['name']) > 30)
        {
            $flagError = TRUE;
            $errorArr[] = "Tên danh mục không được để trống hoặc nhiều hơn 30 kí tự";
        }


        if ($flagError)
        {
            $result['error'] =& $errorArr;
            $result['input'] = $_POST;
            return $result;
        }
        if ($_POST['parent_id'] != 0)
        {
            $con = array('id' => $_POST['parent_id']);
            $rs = $this->tables['category']->get($con);
            $row = $rs->getRow(0);
            $level = $row->c_level + 1;
        }
        else
        {
            $level = 0;
        }
        $this->tables['category']->set('name', $_POST['name']);
        if (!is_null($_POST['link']))
            $this->tables['category']->set('link', $_POST['link']);
        $this->tables['category']->set('parent_id', $_POST['parent_id']);
        $this->tables['category']->set('c_level', $level);
        $this->tables['category']->set('c_order', 0);
        $con = array('id' => $id);
        $this->tables['category']->update($con);
        $result['message'] = "Sửa danh mục thành công";
        return $result;
    }

    public function getCategory($id)
    {
        $result = NULL;
        $condition = array('id' => $id);
        $result  = $this->tables['category']->get($condition);
        return $result;
    }

    public function handleRemove($id)
    {
        $this->loadTable('post');
        $this->removeChildCat($id);
    }

    public function removeChildCat($id)
    {
        $rs = $this->tables['category']->get(array('parent_id' => $id));
        if($rs->getSize() > 0)
        {
            $size = $rs->getSize();
            for($i = 0;$i < $size;$i++)
            {
                $row = $rs->getRow($i);
                $this->removeChildCat($row->id);
            }
        }
        $this->tables['post']->remove(array('category_id' => $id));
        $this->tables['category']->remove(array('id' => $id));
    }
}